本章我们将会使用可视化完成 “苏菲的世界中,问题和哲学家之间的关系是怎样的?” 这个任务。也就是看看哪些哲学家回答了哪些抽象的哲学问题。
# 任务分析
这个问题需要分析哲学和问题之间的关系,分成几步:
- 罗列出哲学家和问题,然后将问题和哲学家进行连接, 使用力导图对问题和参与该问题的哲学家进行可视化
- 蓝色代表问题,绿色代表哲学家,连线代表哲学家参与了该问题
- 获取数据洞察
前述从 0 到 1 开发的极简统计图表, 由于力导图的实现相对复杂,这里我们直接用 AntV 成熟的图可视化引擎 G6 来绘制和完成任务。
下面会按照这几个步骤,去实现这样的一个力导图,并从中获得数据洞察。
# 可视分析
# 获取数据
首先我们从《苏菲的世界》中,获取所有问题列表,以及回答过该问题的哲学家,为了简化代码,我们仅列出少量数据和有代表性的数据项,全量数据可在 GitHub 上下载。
// 哲学家列表
const philosophers = [
{
name: "泰利斯",
id: "66",
},
// ...
];
// 问题列表
const questions = [
{
title: "世界从何而来?",
id: "0",
},
{
title: "我是谁?",
id: "1",
},
];
// 关系列表
const relations = [
{ from: "151", to: "66" },
// ...
];
@前端进阶之旅: 代码已经复制到剪贴板
# 用 Sparrow 绘制力导向图
力导向图是图可视化的一种,通过算法模拟自然界的引力和斥力去给图中的节点布局。和词云图一样,Sparrow 也没有实现力导向布局算法,所以这里我们用 d3-force 去计算布局,然后再用 Sparrow 去绘制。

(async () => {
// 请求数据
const URLS = [
"https://gw.alipayobjects.com/os/bmw-prod/d345d2d7-a35d-4d27-af92-4982b3e6b213.json",
